914. 卡牌分组

914. 卡牌分组

Similar Question

Solution Tips

方案一: 哈希计数 + Gcd

var hasGroupsSizeX = function (deck) {
    let map = new Map()
    // [1,1,1] 也是OK的,x=3
    if (deck.length <= 1) return false

    for (let i = 0; i < deck.length; i++) {
        if (map.get(deck[i]) === undefined) {
            map.set(deck[i], 1)
        } else {
            map.set(deck[i], map.get(deck[i]) + 1)
        }
    }

    let result = [...map.values()].sort()
    // 先判断头尾,如果相余为0,再判断剩余的
    let len = result.length
    let min = result[0]

    // 应该求的是最大公因数
    for (let i = 1; i < len; i++) {
        min = getGreatestCommonDivisor(result[i], min);
    }

    return min >= 2;

    function getGreatestCommonDivisor(a, b) {
        if (b === 0) return a
        return getGreatestCommonDivisor(b, a % b)
    }
};

console.log(hasGroupsSizeX([1,1,1,2,2,2,3,3]));